This page is the exhaustive list: every IRCv3 capability HexDroid negotiates, and every setting in the app. If you are looking for what HexDroid does rather than what it supports, start with Features.
IRCv3 capabilities
Every capability HexDroid negotiates during the connection handshake, and what it does with each one. All of them can be switched off individually per network under IRCv3 Capabilities in network settings. Badges: graduated = finalized spec · draft = draft spec · vendor = implementation-specific.
Core Message Infrastructure
| Capability | Status | What HexDroid does |
|---|---|---|
| message-tags | graduated | Parses and propagates @tag=value metadata on incoming messages |
| server-time | graduated | Displays accurate timestamps on all messages, including replayed history |
| echo-message | graduated | Matches the server’s copy of each message you send to the line already shown, so your log carries the server’s timestamp. A message the server refuses (for example “Cannot send to channel”) is marked as not sent |
| labeled-response | graduated | Correlates command responses with their triggering requests, including the echo, refusal or ACK for each message you send |
| batch | graduated | Processes grouped message batches atomically. netsplit / netjoin batches collapse the quit/join flood into a single summary line (“Netsplit (a.net ↔ b.net) - N users affected”) while the nick list still updates per user |
| utf8only | graduated | Signals UTF-8 capability; enforces UTF-8 output on utf8only networks |
| message-ids | graduated | Tracks unique msgid tags for deduplication of chathistory replays |
| standard-replies | graduated | Parses FAIL/WARN/NOTE replies and surfaces them contextually per buffer |
| draft/extended-isupport | draft | Fetches server metadata before the connection finishes registering. HexDroid sends the ISUPPORT command as soon as the capability is acknowledged, so tokens like CLIENTTAGDENY, NETWORK and the filehost endpoint are known before the first message is sent rather than after. Replies arrive in a draft/isupport batch when batch is also enabled, and token withdrawals (-KEY) are honoured. |
| sts | graduated | Strict Transport Security. A plaintext connection that receives sts port= reconnects over TLS immediately; a TLS connection that receives sts duration= stores a per-host TLS-only policy that also disables the invalid-certificate override until it expires. A stale policy can be cleared from network settings. |
| draft/multiline | draft | Receives messages that exceed 512 bytes or contain line breaks as a single grouped message instead of one IRC line per visual line. Uses the draft/multiline BATCH type with the +draft/multiline-concat tag for flood-control splits. Both the draft and forward-compat graduated multiline are negotiated. |
History & Read State
| Capability | Status | What HexDroid does |
|---|---|---|
| chathistory | graduated | Server-side message history. Recent messages are requested on join (LATEST); scrolling to the top of a buffer fetches the previous page (BEFORE) and keeps going as you scroll; on connect, TARGETS lists the buffers the server has stored history for and each one is caught up from your newest local message (AFTER), so a private message sent while you were offline is waiting for you rather than appearing only when the sender speaks again |
| draft/chathistory | draft | Same as above for servers on the earlier draft spec. Request sizes respect the server's CHATHISTORY limit, and selectors fall back to a supported reference type per MSGREFTYPES. |
| draft/chathistory-targets | draft | The batch the TARGETS reply arrives in. Channels in the list are skipped: they are caught up by the request sent when you rejoin, and re-opening a channel you deliberately closed would undo your own tidying up |
| draft/event-playback | draft | Replays channel state events (joins, modes) alongside message history |
| draft/read-marker | draft | Syncs read position with the server for multi-client read-state tracking |
| soju.im/read | vendor | soju-specific read-marker sync |
Membership & Presence
| Capability | Status | What HexDroid does |
|---|---|---|
| account-notify | graduated | Updates account name when a user logs in/out of services |
| away-notify | graduated | Tracks away/back state for all channel members in real time; away users are dimmed in the member list |
| chghost | graduated | Updates the user's displayed hostmask when it changes without a rejoin |
| extended-join | graduated | Receives account name and real name in JOIN; displayed in user info panel |
| multi-prefix | graduated | Shows all channel prefixes a user holds (e.g. @+nick for op+voice) |
| userhost-in-names | graduated | Receives full nick!user@host in the 353 NAMES reply. Off by default: WHOX already supplies the same detail on the servers that offer it |
| invite-notify | graduated | Notifies you when another user is invited to a channel you're in |
| monitor | graduated | Watches for a list of nicks coming online/offline |
| extended-monitor | graduated | Extended MONITOR with account and away state in notifications. Both the graduated name and the legacy draft/extended-monitor are negotiated. |
| WHOX | vendor | Extended WHO. On servers that advertise WHOX in ISUPPORT, joining a channel sends WHO #chan %tuhsnfar,42, so ident, host, account, away state and oper status are known for every member without a separate lookup. Not a capability; driven by ISUPPORT, toggleable per network |
| pre-away | graduated | Sends AWAY before 001 registration when configured as away |
Messaging
| Capability | Status | What HexDroid does |
|---|---|---|
| account-tag | graduated | Surfaces the sender's services account name as a per-message tag |
| sasl | graduated | Authenticates using PLAIN, SCRAM-SHA-256, or EXTERNAL during handshake |
| setname | graduated | Enables /setname to change your real name on the fly without reconnecting, and lets extended-monitor report real-name changes. On by default for new networks; existing networks keep their saved setting |
| +typing | draft | Typing indicators. Shows when someone in a channel or query is composing, and sends your own state as you type. Carried as the +typing client tag rather than a capability of its own, so it rides message-tags and a server’s CLIENTTAGDENY policy is respected. Both halves are toggleable under Privacy; sending is off by default |
| draft/message-reactions | draft | Receives TAGMSG-based emoji reactions; displayed inline on messages. Removal is sent as both +draft/unreact (current react spec) and the older +draft/react-removed, and replies carry both +draft/reply and the ratified +reply tag. |
| draft/message-redaction | draft | Message deletion. Long-press one of your own messages › Delete message (or /redact <msgid>) sends REDACT; incoming redactions replace the message with a tombstone for everyone. Both the draft and forward-compat message-redaction names are negotiated. |
| draft/oper-tag | draft | Messages and notices from IRC operators are marked with an amber ★ before the nick. Reads the draft/oper tag and the eventual ratified oper name; rides message-tags, no extra negotiation. |
| bot mode / tag | graduated | Users flagged as bots are badged [bot] in the member list, on their messages, and in the nick tap sheet. Detected from the BOT ISUPPORT mode letter in WHO/WHOX flags and from the bot message tag; rides message-tags. |
| +draft/channel-context | draft | A private message carrying this client tag is annotated with the channel it relates to ([#channel] prefix), so a PM reply to something said in a channel keeps its context. Accepts the draft and ratified +channel-context forms. |
| draft/metadata-2 | draft | User and channel metadata. HexDroid subscribes to display-name, avatar, color, and status on connect: the display name appears beside the nick, a color tints the nick, and tapping a nick shows their avatar and status. Avatars also show in the member list and in notifications. A metadata editor (overflow menu › Edit metadata, or /metadata) sets your own keys - display name, status, colour, avatar and more - and reads or sets keys on another user or a channel. Deferred syncs (RPL_METADATASYNCLATER) are retried automatically. Requires the batch capability, per the spec. On soju, which keeps no metadata for users, only soju.im/muted is subscribed (see below) and your own keys are not sent. |
| draft/account-registration | draft | Standardized account creation without NickServ syntax. A guided Register account dialog (overflow menu) walks through register → email-verify → done, adapting its fields to the server's advertised flags (email required, custom account names), with an option to save the password for SASL auto-login. The /register and /verify commands drive the same REGISTER/VERIFY flow; a bare /verify <code> targets the account the server just asked to verify, and failure codes are translated into actionable hints. On servers without the cap, /register points at NickServ instead. |
| draft/relaymsg | draft | Renders RELAYMSG-relayed messages from bridges (Discord, Matrix, Telegram) under the original sender’s name rather than the bridge bot’s. Off by default |
| draft/channel-rename | draft | Follows channel renames in real time. The buffer updates in place, keeping its scrollback and read state, so there is nothing to re-join |
| draft/no-implicit-names | draft | Opt out of the implicit NAMES list on join. Both the draft and graduated no-implicit-names names are negotiated. Off by default; the soju-specific form below is on |
Multimedia
| Capability | Status | What HexDroid does |
|---|---|---|
| draft/ICON | draft | Server icon. When a server advertises ICON=<url> or draft/ICON=<url> (with optional {size} template), the icon is shown next to the network name on the Networks screen, in the sidebar, and in the network switcher. Fetched only when image previews are enabled, only over HTTPS, and never on proxied (Tor/SOCKS) profiles. |
Push
| Capability | Status | What HexDroid does |
|---|---|---|
| draft/webpush | draft | Web Push notifications. The server can reach you with a highlight or private message while no connection is open, so the background connection stops being the only way to be notified. The endpoint comes from a UnifiedPush distributor on the device and is handed over with WEBPUSH REGISTER; the server’s application-server key is read from the VAPID ISUPPORT token. Off by default and requires a distributor app. See Notifications |
Bouncer/Vendor
| Capability | Status | What HexDroid does |
|---|---|---|
| znc.in/server-time-iso | vendor | Parses ZNC's legacy server-time format for accurate timestamps on playback |
| znc.in/playback | vendor | Uses ZNC's playback module to request missed messages |
| soju.im/bouncer-networks | vendor | Lists the upstream networks of your soju account with their address, TLS and the last connection error, in the Bouncer networks card of the soju profile. From there each can be imported as a profile, or all at once, and soju’s networks can be added, edited and deleted (BOUNCER ADDNETWORK, CHANGENETWORK and DELNETWORK). A new network can be imported as soon as it is added, and deleting one can delete its profile too. Imported profiles remember the network’s ID, so renaming a network on the bouncer renames the profile’s network with it |
| soju.im/bouncer-networks-notify | vendor | Keeps that list current as networks are added, changed, connect, disconnect or are removed |
| soju.im/search | vendor | Search logs also searches the history soju keeps (SEARCH), for the conversations the search covers, on connections bound to a network. Those results are marked Bouncer, results already in your logs are shown once, and opening one fetches the messages around it with chathistory when they are not loaded |
| soju.im/muted | vendor | A metadata key, not a capability. soju’s draft/metadata-2 holds only its own per-conversation keys, so on soju HexDroid subscribes to soju.im/muted alone, once the connection is bound. Muting a channel or private chat in HexDroid mutes it for your other soju clients and the other way round, and a change either side made while the other was away is kept when they next meet |
| soju.im/account-required | vendor | Informational, so never requested. When soju refuses a connection with FAIL * ACCOUNT_REQUIRED, HexDroid says to turn on SASL or set a server password, and stops reconnecting until you do |
| BOUNCER_NETID | vendor | An ISUPPORT token naming the network a soju connection is bound to. Recorded on the profile, so a renamed network is still recognised |
| soju.im/SAFERATE | vendor | An ISUPPORT token: soju delays a client that sends too fast rather than disconnecting it, so HexDroid turns its own flood pacing off |
| soju.im/no-implicit-names | vendor | Suppresses the automatic 353 NAMES list on JOIN. Skips a full names re-download on every bouncer reconnect. |
| soju.im/webpush | vendor | soju shipped Web Push before the draft existed and still advertises the vendored name; both are negotiated. See draft/webpush above |
| soju.im/FILEHOST | vendor | File uploads. When the server advertises an upload endpoint, an attach button appears in the chat input: pick a file, it uploads over HTTPS with your connection credentials, and the returned URL is placed in the input ready to send. Toggleable per network. |
Settings
Global settings in Settings, listed under the twelve category pages the app groups them into: Appearance, Chat & Messages, Media Previews, Aliases, Highlights, IRC, Notifications, Logging, Privacy, IRCv3 History, File transfers and Backup & Restore. The search button in the settings top bar finds a setting by its name, its description, its category or a common alternate term, across every language the app ships rather than only the one on screen. Per-network options (identity, SASL, TLS client certificates, auto-join, auto-connect, encoding, IRCv3 capabilities) live in the network editor instead. The button beside search in the top bar switches between these category pages and a single continuous page, and the network editor follows the same choice.
Appearance
| Setting | Description | Default |
|---|---|---|
| Language | App language, or follow the system setting | System |
| Theme | Dark, Light, Matrix, Terminal, or System default | Dark |
| UI font | Open Sans, Inter, Monospace, or a custom font file | Open Sans |
| Chat font | Typeface for the message area and input, set separately from the UI font | Monospace |
| Chat font style | Regular, bold, italic or bold italic for the message area. IRC formatting codes still override it per span | Regular |
| Font size | Chat text size across all buffers | 100% |
| Chat line spacing | Space between one message and the next. Tight, Normal or Relaxed; text size is unchanged | Normal |
| Font line height | Space between the wrapped lines within a single message. Text size is unchanged | Normal |
| Nicklist text size | Adjusts the member list text on top of its pane width. Widening the pane still enlarges the text | 0 |
| Compact mode | Tighter row spacing in the message list | Off |
| Network tabs | Show networks as tabs instead of a tree | Off |
| Network bar above input | Show the channel switcher at the bottom of the chat, just above the message input | Off |
| Intro tour | Replay the walkthrough of the main screens and shortcuts. Offered from the card at the top of the settings category list | - |
Chat & Messages
| Setting | Description | Default |
|---|---|---|
| Show nick icons | Presence, away and bot markers beside nicks in the chat and the member list | On |
| Colourise nicks | Consistent colour per nickname | On |
| My nick colour | Auto, or pick a custom colour for your own nick | Auto |
| Enable mIRC colours | Render mIRC colour codes, including the full 99-colour palette, \x04RRGGBB hex colours and reverse | On |
| Enable ANSI colours | Render ANSI/SGR escape sequences, including 256-colour and 24-bit RGB | On |
| Shrink ASCII/ANSI art | Detect runs of ASCII or ANSI art from the same sender and draw them as one monospace block, scaled to fit the screen so the picture lines up; a block still too wide at the smallest size scrolls sideways. Lines of ordinary text with emoji are never treated as art. If a block is misread, tap Show as text above it. Off renders every line as ordinary chat text | On |
| Coloured channel events | Colour join, part, quit, kick, nick and mode lines | On |
| Show topic bar | Channel topic above the message list | On |
| Show timestamps | Timestamp each message | On |
| Timestamp format (Java) | Java pattern used for timestamps | HH:mm:ss |
| Timestamp brackets | Square, round, angle or curly brackets, a trailing dash, or none. A live sample shows the result | Square |
| Timestamp colour | Give timestamps their own colour from the picker, or leave them the same as the message | Same as the message |
| Nick brackets | Brackets around sender nicks: square, round, angle, curly, nick:, or none | Angle |
| Hide MOTD on connect | Suppress the server message of the day | Off |
| Channel events | Which events appear in channels, as a chip for each: joins, parts, quits, nick changes, topic changes, kicks and mode changes. Hide all / Show all switches the lot. Your own nick changes and kicks against you always show, a hidden topic change still updates the topic bar, and scripts still receive every event. A channel can have its own choice in Channel settings | All shown |
| Smart filter | Joins, parts, quits and nick changes show only for people who spoke recently, within 5, 10, 30 or 60 minutes. A join is shown after all, at its own time, if the person speaks soon after | Off, 10 min |
| Hide hostnames in join/part/quit messages | Leave out the user@host, so the line reads * nick has joined #channel. Part and quit reasons, and the account name from extended-join, still show. Applies to lines from then on, logs included | Off |
| Hide away/back messages | Suppress away-notify events | Off |
| Hide topic on entry | Suppress the topic when joining a channel | Off |
| Show network/chans by default | Open the buffer list automatically in landscape | On |
| Show nicklist by default | Open the member list automatically in landscape | On |
| Side pane nicklist | In portrait, show the nicklist as a resizable side pane instead of a popup, so the toggle becomes a persistent show/hide | On |
Media Previews
| Setting | Description | Default |
|---|---|---|
| Enable image & video previews | Previews for images and YouTube links posted in chat. X/Twitter links resolve via fxtwitter.com. Previews are never automatic, you tap to load | Off |
| Wi-Fi only | Only load previews on Wi-Fi, to avoid using mobile data | On |
Aliases
| Setting | Description | Default |
|---|---|---|
| Custom aliases | Your own slash commands, each a name and the command it expands to. Also managed with /alias list, /alias add <name> <expansion> and /alias remove <name> | - |
Highlights
| Setting | Description | Default |
|---|---|---|
| Highlight on nick | Treat mentions of your nick as highlights | On |
| Extra highlight words | Additional trigger words, one per line, case-insensitive | - |
IRC
| Setting | Description | Default |
|---|---|---|
| Ignore list | Nicks or nick!user@host masks to ignore, per network, each with its own choice of what to drop: channel messages, private messages, notices, CTCP, invites, DCC offers, and joins, parts and quits | - |
| Scripts | Load and manage .hex scripts: games, tools and custom commands. See Scripting | - |
| Raw protocol log | Show every line sent and received in a Raw buffer per network. Passwords are hidden. For debugging | Off |
| Quit message | Sent when you disconnect | An IRC client for Android - https://hexdroid.org |
| Part message | Sent when you leave a channel | Leaving |
| Show connection status notification | Persistent notification showing connection state | On |
| Keep the connection alive | Foreground service that maintains the connection in the background | On |
| Reconnect after device restart | After the device reboots, bring back the networks marked auto-connect without opening the app. Requires “Keep the connection alive” | Off |
| Wait for Wi-Fi | With the above on, hold the reconnect until an unmetered network is up rather than connecting over mobile data. The connection status shows “Waiting for Wi-Fi” until then; opening the app connects immediately | Off |
| Auto-reconnect | Reconnect after an unexpected disconnection | On |
| Push notifications | Let servers supporting the webpush extension notify you through a UnifiedPush distributor while no connection is open. Needs a distributor app installed; the switch is disabled until one is. Independent of “Keep the connection alive”, which you can then turn off if push is working | Off |
| Reconnect interval (seconds) | How often to retry when the connection drops | 10 |
| Rejoin on kick | Rejoin automatically after a kick. A second kick on the same channel within 60 seconds is skipped, to avoid loops against +i/+k/+b modes | Off |
| Regain primary nick | When you connect on an alternate nick because yours is taken, keep trying to switch back to it for a few minutes. Turning it off also stops an attempt already in progress | On |
Notifications
| Setting | Description | Default |
|---|---|---|
| Enable notifications | Master toggle for all notifications | On |
| Highlight notifications | Alert when your nick or a highlight word is mentioned | On |
| Private message notifications | Alert on incoming private messages and DCC chat messages | On |
| Sound on highlight | Audible alert | Off |
| Vibrate on highlight | Haptic feedback | Off |
| Vibration intensity | Low, Medium, or High | Medium |
Logging
| Setting | Description | Default |
|---|---|---|
| Enable logging | Write chat messages to log files on device | Off |
| Log server buffer | Also log server and status messages | Off |
| Log folder | Internal storage, or a custom folder chosen via SAF | Internal storage |
| Export logs | Save the logs kept in app storage as a single .zip, through the system file picker. The button sits under Log folder, beside the space the logs use, and appears once there are logs in app storage | - |
| Delete logs | Permanently delete the logs kept in app storage for every network, after a confirmation. With a custom folder chosen, this covers only older logs still left in app storage; the folder is never touched. Open conversations keep what they've already loaded until closed or the app restarts | - |
| Retention days | Delete logs older than N days. 0 keeps them forever | 14 |
| Max scrollback lines | Lines per buffer kept in memory. Older lines stay in the log file | 800 |
Privacy
| Setting | Description | Default |
|---|---|---|
| Send typing indicators | Let others see when you are composing. Off by default for privacy, and only sent where the server permits the tag | Off |
| Show others' typing indicators | Display an indicator when someone else is composing | On |
| Read receipts | In private messages, tell the other person when you've read their messages and see when they've read yours, shown as a double tick after your message. Sent only while the newest message is on screen. Both people need HexDroid with this on; sending and showing go together | Off |
| Answer CTCP requests | Reply to VERSION, TIME, PING, CLIENTINFO and similar. Turn it off to stop answering entirely | On |
IRCv3 History
| Setting | Description | Default |
|---|---|---|
| History fetch limit | Messages requested per channel on join via CHATHISTORY LATEST. 0 disables it | 50 |
| Count fetched history as unread | Mark replayed history as unread | Off |
| Trigger notifications for fetched history | Notify for replayed messages | Off |
| Load older messages | Scrolling to the top of a buffer fetches the previous page from the server automatically, on top of the join-time request above. No setting: it appears only where the server supports it, and stops once the server reports nothing older | - |
File transfers
| Setting | Description | Default |
|---|---|---|
| Enable DCC | Master toggle for all DCC features | Off |
| Use SDCC (TLS encryption) | Send files over TLS via DCC SSEND, and make /dcc chat a secure SCHAT. The remote client must also support SDCC. /dcc schat is always secure, and secure offers from others are accepted either way | Off |
| Download folder | Downloads, or a custom folder | Downloads |
| Incoming port min / max | Port range to listen on, for router forwarding | 5000 / 5010 |
Backup & Restore
| Action | Description |
|---|---|
| Export backup | Save network configurations, app settings and channel settings to a JSON file. Passwords can be included, encrypted with a passphrase. TLS certificates are not included |
| Restore backup | Replace all current networks and settings with those in a backup file. A backup holding passwords asks for its passphrase, or restores without them |
DCC send mode (Active, Passive, or Auto) is chosen on the Transfers screen rather than in Settings. Auto-connect, identity, SASL, TLS, encoding and the per-network IRCv3 capability toggles are all in the network editor.